The first task is to analyze the 2018 results from different perspectives (without comparing it to the 2014 data).
## Warning: package 'arm' was built under R version 3.4.2
## Warning: package 'lme4' was built under R version 3.4.2
## Warning: package 'readr' was built under R version 3.4.3
## Warning: package 'dplyr' was built under R version 3.4.3
## Warning: package 'tidyr' was built under R version 3.4.2
## Warning: package 'ggplot2' was built under R version 3.4.3
## Warning: package 'lmtest' was built under R version 3.4.3
## Warning: package 'zoo' was built under R version 3.4.2
## Warning: package 'sandwich' was built under R version 3.4.2
## Warning: package 'descr' was built under R version 3.4.3
## Warning: package 'DataCombine' was built under R version 3.4.3
## Warning: package 'mfx' was built under R version 3.4.3
## Warning: package 'betareg' was built under R version 3.4.2
## Warning: package 'data.table' was built under R version 3.4.3
## Warning: package 'readstata13' was built under R version 3.4.3
I pulled together the results of all “business” or “fake” parties (that are not the 8 major parties who compete for seats) and also merged all national minority lists (expect for the German national minority list since they received once compensation seat).
Then all the vote percentages have been calculated on OEVK and town-level. These vote shares include part list votes as well as OEVK results for all parties and major candidates (two independents candidates contested seats as strongest opposition candidates).
#kamupartok - nem 8 fo part - egyesitese es szurese
egyeni_egyeb <- subset(data, select = c(megyeid, megye, oevk, telepid, szavazokor, egyeni_na, egyeni_haza_partja, egyeni_aqp, egyeni_civil_mozgalom, egyeni_csp, egyeni_demokrata_part, egyeni_dmp, egyeni_ecdp, egyeni_emmo, egyeni_ep, egyeni_erp, egyeni_eu_alternativa, egyeni_eu_rom, egyeni_fitip, egyeni_fkgp, egyeni_fuggetlen, egyeni_hajra_magyarorszag, egyeni_ham, egyeni_haza_mindenkie, egyeni_hhp, egyeni_ima, egyeni_iranytu, egyeni_jmp, egyeni_jo_ut_mpp, egyeni_kedn, egyeni_kpp, egyeni_kossz, egyeni_kozos_nevezo, egyeni_lendulettel, egyeni_mcp, egyeni_medete_part, egyeni_minokp, egyeni_miszep, egyeni_miep, egyeni_mmm, egyeni_moma, egyeni_munkaspart, egyeni_mvmp, egyeni_neem, egyeni_nemzet_beke, egyeni_nemzeti_zoldek, egyeni_nop, egyeni_np, egyeni_ocp, egyeni_op, egyeni_opre_roma, egyeni_rend_part, egyeni_sem, egyeni_szem_part, egyeni_szp, egyeni_tamp, egyeni_ebmp, egyeni_ertunk_ertetek, egyeni_umf))
orsz_egyeb <- subset(data, select = c(megyeid, megye, oevk, telepid, szavazokor, orsz_csaladok_partja, orsz_eu_roma_keresztenyek, orsz_iranytu, orsz_kossz, orsz_kozos_nevezo, orsz_miep, orsz_magyar_munkaspart, orsz_ciganypart, orsz_mo_dolgozo_tanulo_emberek, orsz_net_part, orsz_rend_elszamoltatas, orsz_sportos_egeszseges_mo, orsz_szegeny_emberek_mo, orsz_tenni_akaras_mozgalom, orsz_osszefogas_part))
nemzetisegi_lista <- subset(data, select = c(megyeid, megye, oevk, telepid, szavazokor, nemzetisegi_bolgar, nemzetisegi_gorog, nemzetisegi_horvat, nemzetisegi_lengyel, nemzetisegi_nemet, nemzetisegi_roma, nemzetisegi_roman, nemzetisegi_ruszin, nemzetisegi_szerb, nemzetisegi_szlovak, nemzetisegi_szloven, nemzetisegi_ukran, nemzetisegi_ormeny))
egyeni_egyeb$egyeni_egyeb <- rowSums( egyeni_egyeb[, 6:59] )
orsz_egyeb$orsz_egyeb <- rowSums( orsz_egyeb[, 6:20] )
nemzetisegi_lista$nemzetisegi_osszes <- rowSums( nemzetisegi_lista[, 6:18] ) - rowSums( nemzetisegi_lista[, 10:11] )
egyeni_egyeb2 <- subset(egyeni_egyeb, select = c(megyeid, megye, oevk, telepid, szavazokor, egyeni_egyeb))
orsz_egyeb2 <- subset(orsz_egyeb, select = c(megyeid, megye, oevk, telepid, szavazokor, orsz_egyeb))
nemzetisegi_2 <- subset(nemzetisegi_lista, select = c(megyeid, megye, oevk, telepid, szavazokor, nemzetisegi_nemet, nemzetisegi_osszes))
data2 <- merge(data, egyeni_egyeb2, by=c("megyeid", "megye", "oevk", "telepid", "szavazokor"))
data3 <- merge(data2, orsz_egyeb2, by=c("megyeid", "megye", "oevk", "telepid", "szavazokor"))
data4 <- merge(data3, nemzetisegi_2, by=c("megyeid", "megye", "oevk", "telepid", "szavazokor"))
#leszurni a fobb partokat + egyeb partokat + nemzetisegieket
data4 <- as.data.table(data4)
data_clean <- data4[, c("megyeid", "megye", "oevk", "telepid", "szavazokor", "telep", "nevjegyz", "megjel", "nevjegyz_atjel", "megjel_atjel", "boritek_atjel", "pecset_nelkul", "pecsettel", "tobblet_hiany", "ervenytelen", "ervenyes", "egyeni_dk", "egyeni_egyutt", "egyeni_fidesz", "egyeni_jobbik", "egyeni_lmp", "egyeni_mszp", "egyeni_momentum", "egyeni_mkkp", "mellar_tamas", "kesz_zoltan", "egyeni_egyeb", "orsz_dk", "orsz_egyutt", "orsz_fidesz", "orsz_jobbik", "orsz_lmp", "orsz_mszp", "orsz_momentum","orsz_mkkp", "orsz_egyeb", "nemzetisegi_nemet.y", "nemzetisegi_osszes")]
data_clean <- rename(data_clean, nemzetisegi_nemet = nemzetisegi_nemet.y)
write.csv(data_clean,'2018_egyeni_listas_clean.csv')
#UJ VALTOZOK - partok szazalekos egyeni es orszagos eredmenye egymashoz viszonyitva
data_clean <- data_clean[, egyeni_fidesz_pc := egyeni_fidesz / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_jobbik_pc := egyeni_jobbik / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_mszp_pc := egyeni_mszp / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_dk_pc := egyeni_dk / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_lmp_pc := egyeni_lmp / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_momentum_pc := egyeni_momentum / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_egyutt_pc := egyeni_egyutt / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_mkkp_pc := egyeni_mkkp / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_egyeb_pc := egyeni_egyeb / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, egyeni_mellar_pc := mellar_tamas / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, kesz_zoltan_pc := kesz_zoltan / (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
#add mellar es kesz zoltan
data_clean <- data_clean[, orsz_fidesz_pc := orsz_fidesz / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, orsz_jobbik_pc := orsz_jobbik / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, orsz_mszp_pc := orsz_mszp / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, orsz_dk_pc := orsz_dk / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, orsz_lmp_pc := orsz_lmp / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, orsz_momentum_pc := orsz_momentum / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, orsz_egyutt_pc := orsz_egyutt / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, orsz_mkkp_pc := orsz_mkkp / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, orsz_egyeb_pc := orsz_egyeb / (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[,elteres_fidesz := egyeni_fidesz - (orsz_fidesz + nemzetisegi_nemet)]
data_clean <- data_clean[,elteres_lmp := egyeni_lmp - orsz_lmp]
data_clean <- data_clean[,elteres_mszp := egyeni_mszp - orsz_mszp]
data_clean <- data_clean[,elteres_mszp_dk := (egyeni_mszp + egyeni_dk) - (orsz_mszp + orsz_dk)]
data_clean <- data_clean[,elteres_dk := egyeni_dk - orsz_dk]
data_clean <- data_clean[,elteres_jobbik := egyeni_jobbik - orsz_jobbik]
data_clean <- data_clean[,elteres_momentum := egyeni_momentum - orsz_momentum]
data_clean <- data_clean[,elteres_egyutt := egyeni_egyutt - orsz_egyutt]
data_clean <- data_clean[,elteres_mkkp := egyeni_mkkp - orsz_mkkp]
data_clean <- data_clean[,elteres_egyeb := egyeni_egyeb - orsz_egyeb]
data_clean <- data_clean[,balodal_jobbik_kihivo := orsz_mszp + orsz_dk - orsz_jobbik]
data_clean <- data_clean[, listas_hianyzo := (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb + nemzetisegi_osszes + nemzetisegi_nemet) - (kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)]
data_clean <- data_clean[, osszes_listas := (orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)]
data_clean <- data_clean[, listas_elteres := ((orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb + nemzetisegi_osszes + nemzetisegi_nemet)) - (megjel + megjel_atjel)]
data_clean <- data_clean[, egyeni_elteres := ((kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)) - (megjel + megjel_atjel)]
#Outputting number of votes to see that these are the right numbers (comparing them to official election website)
fidesz_egyeni_ossz <- sum(data$egyeni_fidesz)
fidesz_egyeni_ossz
## [1] 2636203
fidesz_orszagos_ossz <- sum(data$orsz_fidesz)
fidesz_orszagos_ossz
## [1] 2608086
mszp_egyeni_ossz <- sum(data$egyeni_mszp)
mszp_egyeni_ossz
## [1] 622458
mszp_orszagos_ossz <- sum(data$orsz_mszp)
mszp_orszagos_ossz
## [1] 681358
jobbik_egyeni_ossz <- sum(data$egyeni_jobbik)
jobbik_egyeni_ossz
## [1] 1276766
jobbik_orszagos_ossz <- sum(data$orsz_jobbik)
jobbik_orszagos_ossz
## [1] 1090550
lmp_orszagos_ossz <- sum(data_clean$orsz_lmp)
lmp_orszagos_ossz
## [1] 402266
lmp_egyeni_ossz <- sum(data_clean$egyeni_lmp)
lmp_egyeni_ossz
## [1] 312731
data_clean$oevk_id <- paste(data_clean$megye, data_clean$oevk)
by_szavazokor_2018 <- data_clean[, , by = list(megyeid, megye, telepid, szavazokor, telep)]
write.csv(by_szavazokor_2018,'2018_by_szavazokor.csv', fileEncoding = "UTF-8")
#OEVK results (8 main parties part)
egyeni_lista_by_oevk_2018 <- by_szavazokor_2018[, list(
# megyeid = megyeid,
# megye = megye,
# telepid = telepid,
# telep = telep,
szavazok = sum(nevjegyz + nevjegyz_atjel),
ossz_szavazo = sum(megjel + megjel_atjel),
tobblet_hiany = sum(tobblet_hiany),
ervenytelen = sum(ervenytelen),
ervenyes = sum(ervenyes),
ervenytelen_szazalek = sum(ervenytelen) / (sum(ervenytelen) + sum(ervenyes)),
egyeni_fidesz = sum(egyeni_fidesz),
egyeni_lmp = sum(egyeni_lmp),
egyeni_mszp = sum(egyeni_mszp),
egyeni_dk = sum(egyeni_dk),
egyeni_mszp_dk = sum(egyeni_mszp) + sum(egyeni_dk),
egyeni_jobbik = sum(egyeni_jobbik),
egyeni_momentum = sum(egyeni_momentum),
egyeni_egyutt = sum(egyeni_egyutt),
egyeni_mkkp = sum(egyeni_mkkp),
egyeni_mellar = sum(mellar_tamas),
egyeni_kesz = sum(kesz_zoltan),
egyeni_egyeb = sum(egyeni_egyeb),
egyeni_fidesz_pc = sum(egyeni_fidesz) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_lmp_pc = sum(egyeni_lmp) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_mszp_pc = sum(egyeni_mszp) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_dk_pc = sum(egyeni_dk) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_jobbik_pc = sum(egyeni_jobbik) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_momentum_pc = sum(egyeni_momentum) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_egyutt_pc = sum(egyeni_egyutt) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_mkkp_pc = sum(egyeni_mkkp) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_mellar_pc = sum(mellar_tamas) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_kesz_pc = sum(kesz_zoltan) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_egyeb_pc = sum(egyeni_egyeb) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
orsz_fidesz = sum(orsz_fidesz),
orsz_lmp = sum(orsz_lmp),
orsz_mszp = sum(orsz_mszp),
orsz_dk = sum(orsz_dk),
orsz_mszp_dk = sum(orsz_mszp) + sum(orsz_dk),
orsz_jobbik = sum(orsz_jobbik),
orsz_momentum = sum(orsz_momentum),
orsz_egyutt = sum(orsz_egyutt),
orsz_mkkp = sum(orsz_mkkp),
orsz_egyeb = sum(orsz_egyeb),
nemzetisegi_osszes = sum(nemzetisegi_osszes),
nemzetisegi_nemet = sum(nemzetisegi_nemet),
orsz_fidesz_pc = sum(orsz_fidesz) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_lmp_pc = sum(orsz_lmp) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_mszp_pc = sum(orsz_mszp) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_dk_pc = sum(orsz_dk) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_jobbik_pc = sum(orsz_jobbik) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_momentum_pc = sum(orsz_momentum) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_egyutt_pc = sum(orsz_egyutt) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_mkkp_pc = sum(orsz_mkkp) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_egyeb_pc = sum(orsz_egyeb) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
elteres_fidesz = sum(egyeni_fidesz) - (sum(orsz_fidesz)),
elteres_lmp = sum(egyeni_lmp) - sum(orsz_lmp),
elteres_mszp = sum(egyeni_mszp) - sum(orsz_mszp),
elteres_mszp_dk = (sum(egyeni_mszp) + sum(egyeni_dk)) - (sum(orsz_mszp) + sum(orsz_dk)),
elteres_dk = sum(egyeni_dk) - sum(orsz_dk),
elteres_jobbik = sum(egyeni_jobbik) - sum(orsz_jobbik),
elteres_momentum = sum(egyeni_momentum) - sum(orsz_momentum),
elteres_egyutt = sum(egyeni_egyutt) - sum(orsz_egyutt),
elteres_mkkp = sum(egyeni_mkkp) - sum(orsz_mkkp),
elteres_egyeb = sum(egyeni_egyeb) - sum(orsz_egyeb),
elteres_nemzetisegi_osszes = sum(nemzetisegi_osszes) * -1,
elteres_nemzetisegi_nemet = sum(nemzetisegi_nemet) * -1,
listas_hianyzo = sum((orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb + nemzetisegi_osszes + nemzetisegi_nemet)) - sum((kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
balodal_jobbik_kihivo = sum(orsz_mszp) + sum(orsz_dk) - sum(orsz_jobbik)),
by = oevk_id][order(oevk_id)]
write.csv(egyeni_lista_by_oevk_2018,'2018_by_oevk.csv', fileEncoding = "UTF-8")
### TELEPULES szintű adatok
egyeni_lista_by_telep_2018 <- by_szavazokor_2018[, list(
megyeid = megyeid,
megye = megye,
telepid = telepid,
telep = telep,
szavazok = sum(nevjegyz + nevjegyz_atjel),
ossz_szavazo = sum(megjel + megjel_atjel),
tobblet_hiany = sum(tobblet_hiany),
ervenytelen = sum(ervenytelen),
ervenyes = sum(ervenyes),
ervenytelen_szazalek = sum(ervenytelen) / (sum(ervenytelen) + sum(ervenyes)),
egyeni_fidesz = sum(egyeni_fidesz),
egyeni_lmp = sum(egyeni_lmp),
egyeni_mszp = sum(egyeni_mszp),
egyeni_dk = sum(egyeni_dk),
egyeni_mszp_dk = sum(egyeni_mszp) + sum(egyeni_dk),
egyeni_jobbik = sum(egyeni_jobbik),
egyeni_momentum = sum(egyeni_momentum),
egyeni_egyutt = sum(egyeni_egyutt),
egyeni_mkkp = sum(egyeni_mkkp),
egyeni_mellar = sum(mellar_tamas),
egyeni_kesz = sum(kesz_zoltan),
egyeni_egyeb = sum(egyeni_egyeb),
egyeni_fidesz_pc = sum(egyeni_fidesz) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_lmp_pc = sum(egyeni_lmp) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_mszp_pc = sum(egyeni_mszp) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_dk_pc = sum(egyeni_dk) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_jobbik_pc = sum(egyeni_jobbik) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_momentum_pc = sum(egyeni_momentum) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_egyutt_pc = sum(egyeni_egyutt) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_mkkp_pc = sum(egyeni_mkkp) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_mellar_pc = sum(mellar_tamas) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_kesz_pc = sum(kesz_zoltan) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
egyeni_egyeb_pc = sum(egyeni_egyeb) / (sum(kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
orsz_fidesz = sum(orsz_fidesz),
orsz_lmp = sum(orsz_lmp),
orsz_mszp = sum(orsz_mszp),
orsz_dk = sum(orsz_dk),
orsz_mszp_dk = sum(orsz_mszp) + sum(orsz_dk),
orsz_jobbik = sum(orsz_jobbik),
orsz_momentum = sum(orsz_momentum),
orsz_egyutt = sum(orsz_egyutt),
orsz_mkkp = sum(orsz_mkkp),
orsz_egyeb = sum(orsz_egyeb),
nemzetisegi_osszes = sum(nemzetisegi_osszes),
nemzetisegi_nemet = sum(nemzetisegi_nemet),
orsz_fidesz_pc = sum(orsz_fidesz) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_lmp_pc = sum(orsz_lmp) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_mszp_pc = sum(orsz_mszp) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_dk_pc = sum(orsz_dk) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_jobbik_pc = sum(orsz_jobbik) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_momentum_pc = sum(orsz_momentum) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_egyutt_pc = sum(orsz_egyutt) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_mkkp_pc = sum(orsz_mkkp) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
orsz_egyeb_pc = sum(orsz_egyeb) / (sum(orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb)),
elteres_fidesz = sum(egyeni_fidesz) - (sum(orsz_fidesz)),
elteres_lmp = sum(egyeni_lmp) - sum(orsz_lmp),
elteres_mszp = sum(egyeni_mszp) - sum(orsz_mszp),
elteres_mszp_dk = (sum(egyeni_mszp) + sum(egyeni_dk)) - (sum(orsz_mszp) + sum(orsz_dk)),
elteres_dk = sum(egyeni_dk) - sum(orsz_dk),
elteres_jobbik = sum(egyeni_jobbik) - sum(orsz_jobbik),
elteres_momentum = sum(egyeni_momentum) - sum(orsz_momentum),
elteres_egyutt = sum(egyeni_egyutt) - sum(orsz_egyutt),
elteres_mkkp = sum(egyeni_mkkp) - sum(orsz_mkkp),
elteres_egyeb = sum(egyeni_egyeb) - sum(orsz_egyeb),
elteres_nemzetisegi_osszes = sum(nemzetisegi_osszes) * -1,
elteres_nemzetisegi_nemet = sum(nemzetisegi_nemet) * -1,
listas_hianyzo = sum((orsz_fidesz + orsz_jobbik + orsz_mszp + orsz_dk + orsz_lmp + orsz_momentum + orsz_egyutt + orsz_mkkp + orsz_egyeb + nemzetisegi_osszes + nemzetisegi_nemet)) - sum((kesz_zoltan + mellar_tamas + egyeni_fidesz + egyeni_jobbik + egyeni_mszp + egyeni_dk + egyeni_lmp + egyeni_momentum + egyeni_egyutt + egyeni_mkkp + egyeni_egyeb)),
balodal_jobbik_kihivo = sum(orsz_mszp) + sum(orsz_dk) - sum(orsz_jobbik)),
by = telep][order(orsz_fidesz_pc)]
egyeni_lista_by_telep_2018 <-unique(egyeni_lista_by_telep_2018)
write.csv(egyeni_lista_by_telep_2018,'2018_by_telep.csv', fileEncoding = "UTF-8")
OEVK_profil defines the types of constituencies that contain different types of towns.
The types are:
52 of 106 OEVKs: 0 = Budapest
1 = county capital with few or no smaller towns
2 = county capital or major city with 5-15 smaller towns
3 = major city or cities with some smaller towns
54 of 106 OEVKs:
4 = some smaller cities combined with lots of villages
5 = one smaller town with lots of villages
6 = one smaller town with 100+ villages
OEVK profile scores are significant in all parties’ expected vote share (Fidesz and Jobbik performs worse, left-wing parties perform better)
### OEVK profilok
data_OEVK_profil <- read.csv("2018_by_oevk_OEVK_profiles.csv")
freq(data_OEVK_profil$OEVK_profil)
## data_OEVK_profil$OEVK_profil
## Frequency Percent
## 0 18 16.981
## 1 13 12.264
## 2 6 5.660
## 3 15 14.151
## 4 38 35.849
## 5 12 11.321
## 6 4 3.774
## Total 106 100.000
## ANALYSIS - Fidesz and other party votes
fidesz_vote_by_OEVK_profile <- lm(orsz_fidesz_pc ~ OEVK_profil, data_OEVK_profil)
coeftest(fidesz_vote_by_OEVK_profile)
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.3907641 0.0078427 49.825 < 2.2e-16 ***
## OEVK_profil 0.0313060 0.0023080 13.564 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mszp_vote_by_OEVK_profile <- lm(orsz_mszp_pc ~ OEVK_profil, data_OEVK_profil)
coeftest(mszp_vote_by_OEVK_profile)
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.1703355 0.0042620 39.966 < 2.2e-16 ***
## OEVK_profil -0.0164961 0.0012542 -13.152 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
dk_vote_by_OEVK_profile <- lm(orsz_dk_pc ~ OEVK_profil, data_OEVK_profil)
coeftest(dk_vote_by_OEVK_profile)
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.07961889 0.00227357 35.019 < 2.2e-16 ***
## OEVK_profil -0.00841599 0.00066907 -12.579 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
jobbik_vote_by_OEVK_profile <- lm(orsz_jobbik_pc ~ OEVK_profil, data_OEVK_profil)
coeftest(jobbik_vote_by_OEVK_profile)
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.1530297 0.0075138 20.367 < 2.2e-16 ***
## OEVK_profil 0.0167583 0.0022112 7.579 1.509e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
lmp_vote_by_OEVK_profile <- lm(orsz_lmp_pc ~ OEVK_profil, data_OEVK_profil)
coeftest(lmp_vote_by_OEVK_profile)
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.1045130 0.0035856 29.148 < 2.2e-16 ***
## OEVK_profil -0.0113080 0.0010552 -10.717 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
momentum_vote_by_OEVK_profile <- lm(orsz_momentum_pc ~ OEVK_profil, data_OEVK_profil)
coeftest(momentum_vote_by_OEVK_profile)
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.05217340 0.00174204 29.95 < 2.2e-16 ***
## OEVK_profil -0.00734115 0.00051265 -14.32 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggplot(data_OEVK_profil, aes(OEVK_profil, orsz_fidesz_pc)) + geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("Fidesz vote share % by OEVK profile") + xlab("OEVK profile") + ylab("Fidesz vote share") +
theme_minimal()
ggsave(("fidesz_vote_oevk_profile.png"), width = 30, height = 18, units = c("cm"))
ggplot(data_OEVK_profil, aes(szavazok, orsz_fidesz_pc)) + geom_point(color ="red") +
geom_smooth(method = "lm") + ggtitle("Fidesz vote share % by OEVK size (number of voters)") + xlab("Number of voters") + ylab("Fidesz vote share") +
theme_minimal()
ggsave(("fidesz_vote_oevk_size.png"), width = 30, height = 18, units = c("cm"))
ggplot(data_OEVK_profil, aes(OEVK_profil, orsz_jobbik_pc)) + geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("Jobbik vote share % by OEVK profile") + xlab("OEVK profile") + ylab("Jobbik vote share") +
theme_minimal()
ggsave(("jobbik_vote_oevk_profile.png"), width = 30, height = 18, units = c("cm"))
ggplot(data_OEVK_profil, aes(OEVK_profil, orsz_mszp_pc)) + geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("MSZP vote share % by OEVK profile") + xlab("OEVK profile") + ylab("MSZP vote share") +
theme_minimal()
ggsave(("mszp_vote_oevk_profile.png"), width = 30, height = 18, units = c("cm"))
ggplot(data_OEVK_profil, aes(OEVK_profil, orsz_lmp_pc)) + geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("LMP vote share % by OEVK profile") + xlab("OEVK profile") + ylab("LMP vote share") +
theme_minimal()
ggsave(("lmp_vote_oevk_profile.png"), width = 30, height = 18, units = c("cm"))
The OEVK profile analysis is further reinforced by the town sizes: there are 9 different categories ranging from 0-500 voters/town to over 100,000 (size 1 to 9).
The results show a similar pattern as seen in OEVK profiles (Fidesz and Jobbik performing better in smaller towns vs. left-wing parties performing better in cities)
egyeni_lista_by_telep_2018$telep_tipus <- cut(egyeni_lista_by_telep_2018$szavazok, c(0, 500, 1000, 2000, 5000, 10000, 30000, 60000, 100000, Inf),
labels = c("0", "1", "2", "3", "4", "5", "6", "7", "8"))
freq(egyeni_lista_by_telep_2018$telep_tipus)
## egyeni_lista_by_telep_2018$telep_tipus
## Frequency Percent
## 0 1314 41.3598
## 1 676 21.2779
## 2 581 18.2877
## 3 366 11.5203
## 4 112 3.5253
## 5 87 2.7384
## 6 22 0.6925
## 7 12 0.3777
## 8 7 0.2203
## Total 3177 100.0000
szavazok_by_telep_tipus <- egyeni_lista_by_telep_2018[, list(ossz_szavazo = sum(ossz_szavazo),
ossz_telepules = sum(ossz_szavazo / ossz_szavazo)),
by = telep_tipus][order(telep_tipus)]
egyeni_lista_by_telep_2018$telep_tipus <- as.integer(egyeni_lista_by_telep_2018$telep_tipus)
ggplot(szavazok_by_telep_tipus, aes(x = ossz_szavazo)) + geom_histogram(binwidth = 100000)
ggplot(egyeni_lista_by_telep_2018, aes(telep_tipus, orsz_fidesz_pc)) + geom_point(color ="red") +
geom_smooth(method = "lm") + ggtitle("Fidesz vote share % by town size") + xlab("Town size category") + ylab("Fidesz vote share") +
theme_minimal()
ggsave(("fidesz_vote_town_size.png"), width = 30, height = 18, units = c("cm"))
ggplot(egyeni_lista_by_telep_2018, aes(telep_tipus, orsz_mszp_pc)) + geom_point(color ="red") +
geom_smooth(method = "lm") + ggtitle("MSZP vote share % by town size") + xlab("Town size category") + ylab("MSZP vote share") +
theme_minimal()
ggsave(("mszp_vote_town_size.png"), width = 30, height = 18, units = c("cm"))
ggplot(egyeni_lista_by_telep_2018, aes(telep_tipus, orsz_jobbik_pc)) +
geom_smooth(method = "loess") + geom_point(color ="red") + ggtitle("Jobbik vote share % by town size") + xlab("Town size category") + ylab("Jobbik vote share") +
theme_minimal()
ggsave(("jobbik_vote_town_size.png"), width = 30, height = 18, units = c("cm"))
ggplot(egyeni_lista_by_telep_2018, aes(telep_tipus, orsz_lmp_pc)) + geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("LMP vote share % by town size") + xlab("Town size category") + ylab("LMP vote share") +
theme_minimal()
ggsave(("lmp_vote_town_size.png"), width = 30, height = 18, units = c("cm"))
A separate spreadsheet was prepared showing the last pre-election predictions published on 6 April 2018 and the deviation of these predictions compared to actual constituency results.
It shows the list of districts where each party over-performed or under-performed compared to the predictions. The green line and the dotted red lines show the predicted values (so over and underprediction is clearly visible)
### OEVK predictions
data_pred_egyeni <- read.csv("2018_egyeni_becsles_elteres.csv", fileEncoding = "UTF-8")
OEVK_pred_elemzes <- merge(egyeni_lista_by_oevk_2018, data_pred_egyeni, by ="oevk_id")
ggplot(OEVK_pred_elemzes, aes(Fidesz_egyeni_becsles, egyeni_fidesz_pc)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "loess") +
geom_line(aes(x=Fidesz_egyeni_becsles, y=Fidesz_egyeni_becsles), color="green", size = 1) +
ggtitle("Fidesz predicted and actual vote share % by OEVK") +
xlab("2018 Fidesz vote share") + ylab("Predicted vote share") +
xlim(0.25, 0.65) +
ylim(0.25, 0.65) +
theme_minimal()
ggsave(("fidesz_pred_actual.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(egyeni_fidesz_pc, Fidesz_pred_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "loess") +
geom_hline (yintercept=0, linetype="dashed", color = "red") +
ggtitle("Fidesz actual vote share and prediction error by OEVK") +
xlab("Fidesz vote share") + ylab("Prediction error") +
xlim(0.25, 0.65) +
theme_minimal()
ggsave(("fidesz_deviation.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(Jobbik_egyeni_becsles, egyeni_jobbik_pc)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "loess") +
geom_line(aes(x=Jobbik_egyeni_becsles, y=Jobbik_egyeni_becsles), color="green", size = 1) +
ggtitle("Jobbik predicted and actual vote share % by OEVK") +
xlab("2018 Jobbik vote share") + ylab("Predicted vote share") +
xlim(0.00, 0.50) +
ylim(0.00, 0.50) +
theme_minimal()
ggsave(("jobbik_pred_actual.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(egyeni_jobbik_pc, Jobbik_pred_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "loess") +
geom_hline (yintercept=0, linetype="dashed", color = "red") + ggtitle("Jobbik actual vote share and prediction error by OEVK") +
xlab("Jobbik vote share") + ylab("Prediction error") +
xlim(0.05, 0.45) +
theme_minimal()
ggsave(("jobbik_deviation.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(Baloldal_egyeni_becsles, egyeni_dk_pc)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "loess") +
geom_line(aes(x=Baloldal_egyeni_becsles, y=Baloldal_egyeni_becsles), color="green", size = 1) +
ggtitle("DK predicted and actual vote share % by OEVK") +
xlab("2018 DK vote share") + ylab("Predicted vote share") +
xlim(0.001, 0.55) +
ylim(0.001, 0.55) +
theme_minimal()
ggsave(("dk_pred_actual.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(egyeni_dk_pc, Baloldal_pred_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "loess") +
geom_hline (yintercept=0, linetype="dashed", color = "red") + ggtitle("DK actual vote share and prediction error by OEVK") +
xlab("DK vote share") + ylab("Prediction error") +
xlim(0.001, 0.55) +
theme_minimal()
ggsave(("dk_deviation.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(Baloldal_egyeni_becsles, egyeni_mszp_pc)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "loess") +
geom_line(aes(x=Baloldal_egyeni_becsles, y=Baloldal_egyeni_becsles), color="green", size = 1) +
ggtitle("MSZP predicted and actual vote share % by OEVK") +
xlab("2018 MSZP vote share") + ylab("Predicted vote share") +
xlim(0.001, 0.60) +
ylim(0.001, 0.60) +
theme_minimal()
ggsave(("mszp_pred_actual.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(egyeni_mszp_pc, Baloldal_pred_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "loess") +
geom_hline (yintercept=0, linetype="dashed", color = "red") +
ggtitle("MSZP actual vote share and prediction error by OEVK") +
xlab("MSZP vote share") + ylab("Prediction error") +
xlim(0.001, 0.60) +
theme_minimal()
ggsave(("mszp_deviation.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(LMP_egyeni_becsles, egyeni_lmp_pc)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "lm") +
geom_line(aes(x=Baloldal_egyeni_becsles, y=Baloldal_egyeni_becsles), color="green", size = 1) +
ggtitle("LMP predicted and actual vote share % by OEVK") +
xlab("2018 LMP vote share") + ylab("Predicted vote share") +
xlim(0.08, 0.55) +
ylim(0.08, 0.55) +
theme_minimal()
ggsave(("lmp_pred_actual.png"), width = 25, height = 25, units = c("cm"))
ggplot(OEVK_pred_elemzes, aes(egyeni_lmp_pc, LMP_pred_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id),
size = 2) + geom_smooth(method = "lm") +
geom_hline (yintercept=0, linetype="dashed", color = "red") +
ggtitle("LMP actual vote share and prediction error by OEVK") +
xlab("LMP vote share") + ylab("Prediction error") +
xlim(0.08, 0.55) +
theme_minimal()
ggsave(("lmp_deviation.png"), width = 25, height = 25, units = c("cm"))
Using the data from KSH’s database, I wanted to explore other predictors that could show why people voted for certain parties. Unfortunately, only one of the statistical predictors are significant in telling how people voted. This predictor is the 2014 vote share, all the other predictors improve the prediction too, but only slightly.
The additional predictors were divided into quintiles to have categorical levels instead of the actual measurements.
There was lots of missing data in these predictor (missig values have been replaced with 0)
The AIC score of the prediction on Fidesz is 3445 while it is 1853 on Jobbik. These scores are mixed when only the 2014 vote share is used for the prediction (for Fidesz, AIC with 1 predictor is 3472 which is actually higher, but for Jobbik, it is 1824 suggesting that not all predictors are useful when applied to the Jobbik prediction).
data_telepulesadatok_t_star <-read.csv("Telepulesadatok_t_star.csv")
colnames(data_telepulesadatok_t_star)[1] <- "telep_nev"
egyeni_lista_2018_telep_clean <- read.csv("2018_by_telep_clean.csv", fileEncoding = "UTF-8")
oevk_2014_telep_clean <- read.csv("oevk2014_telepules_clean.csv", fileEncoding = "UTF-8")
t_star_telepules_2018 <- merge(data_telepulesadatok_t_star, egyeni_lista_2018_telep_clean, by.x = "telep_nev")
t_star_telepules_2014_2018 <- merge(oevk_2014_telep_clean, t_star_telepules_2018, by = "telep_nev")
t_star_telepules_2014_2018$megye_ido_km <- as.numeric(t_star_telepules_2014_2018$megye_ido_km)
t_star_telepules_2014_2018$megyeszekhely_km <- as.numeric(t_star_telepules_2014_2018$megyeszekhely_km)
t_star_telepules_2014_2018$megyeszekhely_min <- as.numeric(t_star_telepules_2014_2018$megyeszekhely_min)
t_star_telepules_2014_2018$altisk <- as.numeric(t_star_telepules_2014_2018$altisk)
t_star_telepules_2014_2018 <- as.data.table(t_star_telepules_2014_2018)
write.csv(t_star_telepules_2014_2018, '2014_2018_tstar_by_telep.csv')
###t_star_telepules_2018 is all basic t_star data with all towns (Budapest merged)
#### regression example - GLM
###applying quintiles to continuous variables to create categories for easier analysis
t_star_telepules_2014_2018[is.na(t_star_telepules_2014_2018)] <- 0
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, reszvetel_q <- as.integer(cut(reszvetel, quantile(reszvetel, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, budapest_ido_km_q <- as.integer(cut(budapest_ido_km, quantile(budapest_ido_km, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, megye_ido_km_q <- as.integer(cut(megye_ido_km, quantile(megye_ido_km, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, megyeszekhely_km_q <- as.integer(cut(megyeszekhely_km, quantile(megyeszekhely_km, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, megyeszekhely_min_q <- as.integer(cut(megyeszekhely_min, quantile(megyeszekhely_min, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, budapest_min_q <- as.integer(cut(budapest_min, quantile(budapest_min, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, altisk_q <- as.integer(cut(altisk, quantile(altisk, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, jovedelem_fo_q <- as.integer(cut(jovedelem_fo, quantile(jovedelem_fo, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, ujszulott_rate_q <- as.integer(cut(ujszulott_rate, quantile(ujszulott_rate, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, idosek_rate_q <- as.integer(cut(idosek_rate, quantile(idosek_rate, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, nepesseg_q <- as.integer(cut(nepesseg, quantile(nepesseg, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, elvandorlas_q <- as.integer(cut(elvandorlas, quantile(elvandorlas, probs=0:10/10), include.lowest=TRUE)))
t_star_telepules_2014_2018 <- within(t_star_telepules_2014_2018, odavanadorlas_q <- as.integer(cut(odavanadorlas, quantile(odavanadorlas, probs=0:10/10), include.lowest=TRUE)))
regression_test_2014_2018_tstar_mini <- glm(egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + reszvetel_q +
budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q + megyeszekhely_min_q +
budapest_min_q + altisk_q + jovedelem_fo_q + ujszulott_rate_q +
idosek_rate_q + nepesseg_q + elvandorlas_q + odavanadorlas_q, data=t_star_telepules_2014_2018, na.action = na.pass)
summary(regression_test_2014_2018_tstar_mini)
##
## Call:
## glm(formula = egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + reszvetel_q +
## budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q +
## megyeszekhely_min_q + budapest_min_q + altisk_q + jovedelem_fo_q +
## ujszulott_rate_q + idosek_rate_q + nepesseg_q + elvandorlas_q +
## odavanadorlas_q, data = t_star_telepules_2014_2018, na.action = na.pass)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.51583 -0.03751 0.00049 0.04263 0.38354
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.827e-01 1.193e-02 23.694 < 2e-16 ***
## egyeni_fidesz_pc.x 6.810e-01 1.209e-02 56.326 < 2e-16 ***
## reszvetel_q -3.247e-03 5.209e-04 -6.234 5.14e-10 ***
## budapest_ido_km_q 2.994e-03 1.471e-03 2.035 0.04193 *
## megye_ido_km_q 2.189e-03 1.698e-03 1.290 0.19730
## megyeszekhely_km_q 1.068e-03 1.719e-03 0.621 0.53450
## megyeszekhely_min_q -4.067e-03 1.030e-03 -3.949 8.02e-05 ***
## budapest_min_q -1.635e-03 1.483e-03 -1.103 0.27027
## altisk_q 1.445e-03 5.540e-04 2.609 0.00913 **
## jovedelem_fo_q -1.751e-03 6.306e-04 -2.777 0.00551 **
## ujszulott_rate_q 2.884e-03 5.387e-04 5.353 9.28e-08 ***
## idosek_rate_q -7.197e-04 5.526e-04 -1.302 0.19288
## nepesseg_q -3.378e-03 1.404e-03 -2.407 0.01615 *
## elvandorlas_q -1.042e-05 1.255e-03 -0.008 0.99337
## odavanadorlas_q -3.546e-03 1.165e-03 -3.044 0.00235 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for gaussian family taken to be 0.004832103)
##
## Null deviance: 37.987 on 3153 degrees of freedom
## Residual deviance: 15.168 on 3139 degrees of freedom
## AIC: -7851
##
## Number of Fisher Scoring iterations: 2
coeftest(regression_test_2014_2018_tstar_mini)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.8267e-01 1.1930e-02 23.6940 < 2.2e-16 ***
## egyeni_fidesz_pc.x 6.8099e-01 1.2090e-02 56.3257 < 2.2e-16 ***
## reszvetel_q -3.2475e-03 5.2089e-04 -6.2345 4.532e-10 ***
## budapest_ido_km_q 2.9937e-03 1.4711e-03 2.0350 0.041847 *
## megye_ido_km_q 2.1895e-03 1.6978e-03 1.2896 0.197206
## megyeszekhely_km_q 1.0676e-03 1.7185e-03 0.6212 0.534459
## megyeszekhely_min_q -4.0675e-03 1.0300e-03 -3.9489 7.851e-05 ***
## budapest_min_q -1.6351e-03 1.4829e-03 -1.1026 0.270182
## altisk_q 1.4451e-03 5.5397e-04 2.6087 0.009089 **
## jovedelem_fo_q -1.7513e-03 6.3057e-04 -2.7774 0.005479 **
## ujszulott_rate_q 2.8837e-03 5.3872e-04 5.3529 8.657e-08 ***
## idosek_rate_q -7.1972e-04 5.5261e-04 -1.3024 0.192781
## nepesseg_q -3.3782e-03 1.4036e-03 -2.4068 0.016092 *
## elvandorlas_q -1.0422e-05 1.2550e-03 -0.0083 0.993374
## odavanadorlas_q -3.5465e-03 1.1650e-03 -3.0442 0.002333 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
###Fidesz
logitcoeffs_regression_fidesz_2014_2018_tstar_mini <- glm(egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + reszvetel_q +
budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q + megyeszekhely_min_q +
budapest_min_q + altisk_q + jovedelem_fo_q + ujszulott_rate_q +
idosek_rate_q + nepesseg_q + elvandorlas_q + odavanadorlas_q, data=t_star_telepules_2014_2018, family='binomial'(link="logit"))
summary(logitcoeffs_regression_fidesz_2014_2018_tstar_mini)
##
## Call:
## glm(formula = egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + reszvetel_q +
## budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q +
## megyeszekhely_min_q + budapest_min_q + altisk_q + jovedelem_fo_q +
## ujszulott_rate_q + idosek_rate_q + nepesseg_q + elvandorlas_q +
## odavanadorlas_q, family = binomial(link = "logit"), data = t_star_telepules_2014_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.06999 -0.07761 0.00122 0.08932 0.79917
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.956548 0.355094 -2.694 0.00706 **
## egyeni_fidesz_pc.x 2.946680 0.369673 7.971 1.57e-15 ***
## reszvetel_q -0.012746 0.015602 -0.817 0.41395
## budapest_ido_km_q 0.012099 0.043593 0.278 0.78137
## megye_ido_km_q 0.008728 0.051123 0.171 0.86444
## megyeszekhely_km_q 0.004075 0.051557 0.079 0.93700
## megyeszekhely_min_q -0.016501 0.030448 -0.542 0.58787
## budapest_min_q -0.006142 0.043972 -0.140 0.88892
## altisk_q 0.006249 0.016331 0.383 0.70200
## jovedelem_fo_q -0.008195 0.018807 -0.436 0.66303
## ujszulott_rate_q 0.012495 0.016123 0.775 0.43837
## idosek_rate_q -0.003738 0.016491 -0.227 0.82066
## nepesseg_q -0.015925 0.041984 -0.379 0.70445
## elvandorlas_q 0.001781 0.037471 0.048 0.96209
## odavanadorlas_q -0.015111 0.034739 -0.435 0.66356
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 163.457 on 3153 degrees of freedom
## Residual deviance: 66.755 on 3139 degrees of freedom
## AIC: 3445.5
##
## Number of Fisher Scoring iterations: 4
t_star_telepules_2014_2018$pred_logit_fidesz <- predict.glm(logitcoeffs_regression_fidesz_2014_2018_tstar_mini, type="response")
ggplot(data = t_star_telepules_2014_2018, aes(x=egyeni_fidesz_pc.y, y= pred_logit_fidesz)) + xlim(0.15, 1.00) + ylim(0.15, 1.00) +
geom_text(aes(label=megyeid), size = 1, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Fidesz - Actual and predicted vote share in each town") + xlab("2018 Fidesz vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_fidesz, y=pred_logit_fidesz), color="green", size = 1) +
theme_minimal()
ggsave(("fidesz_GLM_by_megye_id.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = t_star_telepules_2014_2018, aes(x=egyeni_fidesz_pc.y, y= pred_logit_fidesz)) + xlim(0.15, 1.00) + ylim(0.15, 1.00) +
geom_text(aes(label=telep_nev), size = 1, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Fidesz - Actual and predicted vote share in each town") + xlab("2018 Fidesz vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_fidesz, y=pred_logit_fidesz), color="green", size = 1) +
theme_minimal()
ggsave(("fidesz_GLM_by_town.png"), width = 25, height = 25, units = c("cm"))
### Jobbik
logitcoeffs_regression_jobbik_2014_2018_tstar_mini <- glm(egyeni_jobbik_pc.y ~ egyeni_jobbik_pc.x + reszvetel_q +
budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q + megyeszekhely_min_q +
budapest_min_q + altisk_q + jovedelem_fo_q + ujszulott_rate_q +
idosek_rate_q + nepesseg_q + elvandorlas_q + odavanadorlas_q, data=t_star_telepules_2014_2018, family='binomial'(link="logit"))
summary(logitcoeffs_regression_jobbik_2014_2018_tstar_mini)
##
## Call:
## glm(formula = egyeni_jobbik_pc.y ~ egyeni_jobbik_pc.x + reszvetel_q +
## budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q +
## megyeszekhely_min_q + budapest_min_q + altisk_q + jovedelem_fo_q +
## ujszulott_rate_q + idosek_rate_q + nepesseg_q + elvandorlas_q +
## odavanadorlas_q, family = binomial(link = "logit"), data = t_star_telepules_2014_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.79896 -0.12019 -0.01332 0.09677 0.78513
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.3087762 0.3733391 -6.184 6.24e-10 ***
## egyeni_jobbik_pc.x 3.4551682 0.5528942 6.249 4.12e-10 ***
## reszvetel_q 0.0045175 0.0179372 0.252 0.801
## budapest_ido_km_q -0.0058367 0.0492896 -0.118 0.906
## megye_ido_km_q -0.0142813 0.0575405 -0.248 0.804
## megyeszekhely_km_q 0.0235780 0.0583983 0.404 0.686
## megyeszekhely_min_q 0.0091364 0.0344291 0.265 0.791
## budapest_min_q -0.0009181 0.0497189 -0.018 0.985
## altisk_q -0.0116549 0.0188413 -0.619 0.536
## jovedelem_fo_q 0.0114891 0.0214556 0.535 0.592
## ujszulott_rate_q -0.0124786 0.0184914 -0.675 0.500
## idosek_rate_q 0.0199369 0.0189323 1.053 0.292
## nepesseg_q 0.0413809 0.0480430 0.861 0.389
## elvandorlas_q -0.0075975 0.0427605 -0.178 0.859
## odavanadorlas_q 0.0062360 0.0396113 0.157 0.875
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 156.986 on 3153 degrees of freedom
## Residual deviance: 95.862 on 3139 degrees of freedom
## AIC: 1853.4
##
## Number of Fisher Scoring iterations: 4
t_star_telepules_2014_2018$pred_logit_jobbik <- predict.glm(logitcoeffs_regression_jobbik_2014_2018_tstar_mini, type="response")
ggplot(data = t_star_telepules_2014_2018, aes(x=egyeni_jobbik_pc.y, y= pred_logit_jobbik)) + xlim(0.00, 0.65) + ylim(0.00, 0.65) +
geom_text(aes(label=megyeid), size = 1, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Jobbik - Actual and predicted vote share in each town") + xlab("2018 Jobbik vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_jobbik, y=pred_logit_jobbik), color="green", size = 1) +
theme_minimal()
ggsave(("Jobbik_GLM_by_megye_id.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = t_star_telepules_2014_2018, aes(x=egyeni_jobbik_pc.y, y= pred_logit_jobbik)) + xlim(0.00, 0.65) + ylim(0.00, 0.65) +
geom_text(aes(label=telep_nev), size = 1, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Jobbik - Actual and predicted vote share in each town") + xlab("2018 Jobbik vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_jobbik, y=pred_logit_jobbik), color="green", size = 1) +
theme_minimal()
ggsave(("Jobbik_GLM_by_town.png"), width = 25, height = 25, units = c("cm"))
If we use additional predictors such as the number of pensioners, age groups, and people on benefit, the predictions still remain the same.
It is likely that analyzing different town sizes separately or weighing the importance of data points would improve the effectiveness of this prediction model. Also, since Budapest with 1 million voters counts as 1 data point while all the other towns account for 4.5 million votes in 3150 data points, there is a clear bias towards smaller cities.
The prediction shows some towns with vastly different vote shares in 2018 compared to 2014.
Looking at the graph with megye_id (county id) values, we can see that there are dozens of massively overperforming areas in Baranya, Borsod, Somogy, Veszprém, Zala (2,5, 15, 19, 20) counties. Some of these counties are have more small towns than others and three of them are next to the southern border of Hungary suggesting that Fidesz probably targeted these voters to win more votes in the areas. Also, all of these counties contained at least one target opposition seats.
###additional data tables t-star (unemployment rate, pensioners, people on benefits, etc)
rm(list=ls())
data_telepulesadatok_t_star <-read.csv("Telepulesadatok_t_star.csv")
colnames(data_telepulesadatok_t_star)[1] <- "telep_nev"
egyeni_lista_2018_telep_clean <- read.csv("2018_by_telep_clean.csv", fileEncoding = "UTF-8")
oevk_2014_telep_clean <- read.csv("oevk2014_telepules_clean.csv", fileEncoding = "UTF-8")
t_star_telepules_2018 <- merge(data_telepulesadatok_t_star, egyeni_lista_2018_telep_clean, by.x = "telep_nev")
t_star_telepules_2014_2018 <- merge(oevk_2014_telep_clean, t_star_telepules_2018, by = "telep_nev")
data_allaskeresok <- read.csv("tstar/allaskeresok.csv", fileEncoding = "UTF-8")
data_allaskeresok <- as.data.table(data_allaskeresok)
data_allaskeresok <- data_allaskeresok[ev.3 == 2018]
data_koraranyok <- read.csv("tstar/koraranyok.csv", fileEncoding = "UTF-8")
data_koraranyok <- as.data.table(data_koraranyok)
data_koraranyok <- data_koraranyok[ev.3 == 2018]
data_munkaadok <- read.csv("tstar/munkaadok.csv", fileEncoding = "UTF-8")
data_munkaadok <- as.data.table(data_munkaadok)
data_munkaadok <- data_munkaadok[ev.3 == 2018]
data_nyugdijasok <- read.csv("tstar/nyugdijasok.csv", fileEncoding = "UTF-8")
data_nyugdijasok <- as.data.table(data_nyugdijasok)
data_nyugdijasok <- data_nyugdijasok[ev.3 == 2018]
data_tamogatottak <- read.csv("tstar/tamogatottak.csv", fileEncoding = "UTF-8")
data_tamogatottak <- as.data.table(data_tamogatottak)
data_tamogatottak <- data_tamogatottak[ev.3 == 2018]
colnames(t_star_telepules_2014_2018)[1] <- "telnev"
merge_all_t_star1 <- merge(data_allaskeresok, t_star_telepules_2014_2018, by = "telnev")
merge_all_t_star2 <- merge(data_koraranyok, merge_all_t_star1, by = c("telnev", "ev.3"))
merge_all_t_star3 <- merge(data_munkaadok, merge_all_t_star2, by = c("telnev", "ev.3"))
merge_all_t_star4 <- merge(data_nyugdijasok, merge_all_t_star3, by = c("telnev", "ev.3"))
merge_all_t_star4 <- subset(merge_all_t_star4, select = c(1:2, 4:5, 7:145))
merge_all_t_star_all <- merge(data_tamogatottak, merge_all_t_star4, by = c("telnev", "ev.3"))
merge_all_t_star_all$megye_ido_km <- as.numeric(t_star_telepules_2014_2018$megye_ido_km)
merge_all_t_star_all$megyeszekhely_km <- as.numeric(t_star_telepules_2014_2018$megyeszekhely_km)
merge_all_t_star_all$megyeszekhely_min <- as.numeric(t_star_telepules_2014_2018$megyeszekhely_min)
merge_all_t_star_all$altisk <- as.numeric(t_star_telepules_2014_2018$altisk)
write.csv(merge_all_t_star_all, '2014_2018_tstar_all_by_telep.csv')
merge_all_t_star_all[is.na(merge_all_t_star_all)] <- 0
merge_all_t_star_all <- within(merge_all_t_star_all, reszvetel_q <- as.integer(cut(reszvetel, quantile(reszvetel, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, budapest_ido_km_q <- as.integer(cut(budapest_ido_km, quantile(budapest_ido_km, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, megye_ido_km_q <- as.integer(cut(megye_ido_km, quantile(megye_ido_km, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, megyeszekhely_km_q <- as.integer(cut(megyeszekhely_km, quantile(megyeszekhely_km, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, megyeszekhely_min_q <- as.integer(cut(megyeszekhely_min, quantile(megyeszekhely_min, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, budapest_min_q <- as.integer(cut(budapest_min, quantile(budapest_min, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, altisk_q <- as.integer(cut(altisk, quantile(altisk, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, jovedelem_fo_q <- as.integer(cut(jovedelem_fo, quantile(jovedelem_fo, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, ujszulott_rate_q <- as.integer(cut(ujszulott_rate, quantile(ujszulott_rate, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, idosek_rate_q <- as.integer(cut(idosek_rate, quantile(idosek_rate, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, nepesseg_q <- as.integer(cut(nepesseg, quantile(nepesseg, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, elvandorlas_q <- as.integer(cut(elvandorlas, quantile(elvandorlas, probs=0:10/10), include.lowest=TRUE)))
merge_all_t_star_all <- within(merge_all_t_star_all, odavanadorlas_q <- as.integer(cut(odavanadorlas, quantile(odavanadorlas, probs=0:10/10), include.lowest=TRUE)))
###GLM with all T-star data
## Fidesz
logitcoeffs_regression_fidesz_2014_2018_tstar_all <- glm(egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + kozmunka_aranya + nyudijas_ffi_arany +
nyudijas_noi_arany + nok_30_39_aranya + nok_40_49_aranya + nok_65._aranya +
ffi_30_39_aranya + ffi_40_49_aranya + ffi_65._aranya + allaskeresok_aranya_8osztaly +
ervenytelen_szazalek + reszvetel_q +
budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q + megyeszekhely_min_q +
budapest_min_q + altisk_q + jovedelem_fo_q + ujszulott_rate_q +
idosek_rate_q + nepesseg_q + elvandorlas_q + odavanadorlas_q
, data=merge_all_t_star_all, family='binomial'(link="logit"))
summary(logitcoeffs_regression_fidesz_2014_2018_tstar_all)
##
## Call:
## glm(formula = egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + kozmunka_aranya +
## nyudijas_ffi_arany + nyudijas_noi_arany + nok_30_39_aranya +
## nok_40_49_aranya + nok_65._aranya + ffi_30_39_aranya + ffi_40_49_aranya +
## ffi_65._aranya + allaskeresok_aranya_8osztaly + ervenytelen_szazalek +
## reszvetel_q + budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q +
## megyeszekhely_min_q + budapest_min_q + altisk_q + jovedelem_fo_q +
## ujszulott_rate_q + idosek_rate_q + nepesseg_q + elvandorlas_q +
## odavanadorlas_q, family = binomial(link = "logit"), data = merge_all_t_star_all)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.07208 -0.07509 0.00187 0.08527 0.71037
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.3551275 0.7195396 -0.494 0.622
## egyeni_fidesz_pc.x 2.9413608 0.3754493 7.834 4.72e-15 ***
## kozmunka_aranya -0.1724305 1.4424774 -0.120 0.905
## nyudijas_ffi_arany -0.3960608 2.3503367 -0.169 0.866
## nyudijas_noi_arany -0.2669352 2.0158882 -0.132 0.895
## nok_30_39_aranya -1.7016029 3.4949889 -0.487 0.626
## nok_40_49_aranya -3.3025055 3.4262634 -0.964 0.335
## nok_65._aranya 0.1043258 2.6971400 0.039 0.969
## ffi_30_39_aranya -1.0924182 3.0215702 -0.362 0.718
## ffi_40_49_aranya -1.4803474 2.7579308 -0.537 0.591
## ffi_65._aranya -0.3811159 3.2238565 -0.118 0.906
## allaskeresok_aranya_8osztaly 1.1369426 2.6551782 0.428 0.669
## ervenytelen_szazalek -0.2556865 2.8211092 -0.091 0.928
## reszvetel_q -0.0108222 0.0159476 -0.679 0.497
## budapest_ido_km_q 0.0132096 0.0439187 0.301 0.764
## megye_ido_km_q 0.0126444 0.0512543 0.247 0.805
## megyeszekhely_km_q 0.0005945 0.0516787 0.012 0.991
## megyeszekhely_min_q -0.0175408 0.0305395 -0.574 0.566
## budapest_min_q -0.0063984 0.0444801 -0.144 0.886
## altisk_q 0.0036757 0.0168084 0.219 0.827
## jovedelem_fo_q 0.0008359 0.0216888 0.039 0.969
## ujszulott_rate_q 0.0070493 0.0166847 0.423 0.673
## idosek_rate_q -0.0058136 0.0280891 -0.207 0.836
## nepesseg_q -0.0128078 0.0422623 -0.303 0.762
## elvandorlas_q -0.0024093 0.0378241 -0.064 0.949
## odavanadorlas_q -0.0112149 0.0352131 -0.318 0.750
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 163.457 on 3153 degrees of freedom
## Residual deviance: 64.688 on 3128 degrees of freedom
## AIC: 3458.4
##
## Number of Fisher Scoring iterations: 4
merge_all_t_star_all$pred_logit_fidesz <- predict.glm(logitcoeffs_regression_fidesz_2014_2018_tstar_all, type="response")
ggplot(data = merge_all_t_star_all, aes(x=egyeni_fidesz_pc.y, y= pred_logit_fidesz)) + xlim(0.15, 1.00) + ylim(0.15, 1.00) +
geom_text(aes(label=megyeid), size = 1, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Fidesz - Actual and predicted vote share in each town") + xlab("2018 Fidesz vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_fidesz, y=pred_logit_fidesz), color="green", size = 1) +
theme_minimal()
ggsave(("fidesz_GLM_by_megye_id_2.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = merge_all_t_star_all, aes(x=egyeni_fidesz_pc.y, y= pred_logit_fidesz)) + xlim(0.15, 1.00) + ylim(0.15, 1.00) +
geom_text(aes(label=telnev), size = 1, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Fidesz - Actual and predicted vote share in each town") + xlab("2018 Fidesz vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_fidesz, y=pred_logit_fidesz), color="green", size = 1) +
theme_minimal()
ggsave(("fidesz_GLM_by_town_2.png"), width = 25, height = 25, units = c("cm"))
## Jobbik
logitcoeffs_regression_jobbik_2014_2018_tstar_all <- glm(egyeni_jobbik_pc.y ~ egyeni_jobbik_pc.x + kozmunka_aranya + nyudijas_ffi_arany +
nyudijas_noi_arany + nok_30_39_aranya + nok_40_49_aranya + nok_65._aranya +
ffi_30_39_aranya + ffi_40_49_aranya + ffi_65._aranya + allaskeresok_aranya_8osztaly +
ervenytelen_szazalek + reszvetel_q +
budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q + megyeszekhely_min_q +
budapest_min_q + altisk_q + jovedelem_fo_q + ujszulott_rate_q +
idosek_rate_q + nepesseg_q + elvandorlas_q + odavanadorlas_q
, data=merge_all_t_star_all, family='binomial'(link="logit"))
summary(logitcoeffs_regression_jobbik_2014_2018_tstar_all)
##
## Call:
## glm(formula = egyeni_jobbik_pc.y ~ egyeni_jobbik_pc.x + kozmunka_aranya +
## nyudijas_ffi_arany + nyudijas_noi_arany + nok_30_39_aranya +
## nok_40_49_aranya + nok_65._aranya + ffi_30_39_aranya + ffi_40_49_aranya +
## ffi_65._aranya + allaskeresok_aranya_8osztaly + ervenytelen_szazalek +
## reszvetel_q + budapest_ido_km_q + megye_ido_km_q + megyeszekhely_km_q +
## megyeszekhely_min_q + budapest_min_q + altisk_q + jovedelem_fo_q +
## ujszulott_rate_q + idosek_rate_q + nepesseg_q + elvandorlas_q +
## odavanadorlas_q, family = binomial(link = "logit"), data = merge_all_t_star_all)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.79907 -0.11972 -0.01437 0.09835 0.77914
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.716612 0.818315 -3.320 0.000901 ***
## egyeni_jobbik_pc.x 3.483681 0.568297 6.130 8.79e-10 ***
## kozmunka_aranya -0.002097 1.726778 -0.001 0.999031
## nyudijas_ffi_arany -1.599230 2.750247 -0.581 0.560913
## nyudijas_noi_arany 1.063284 2.332485 0.456 0.648492
## nok_30_39_aranya 1.556801 4.068636 0.383 0.701991
## nok_40_49_aranya 2.212368 3.961794 0.558 0.576554
## nok_65._aranya 0.141084 3.132439 0.045 0.964076
## ffi_30_39_aranya 0.337791 3.493047 0.097 0.922962
## ffi_40_49_aranya 0.827394 3.179606 0.260 0.794695
## ffi_65._aranya 1.728509 3.731336 0.463 0.643191
## allaskeresok_aranya_8osztaly -1.025445 3.137778 -0.327 0.743815
## ervenytelen_szazalek 0.444684 3.344254 0.133 0.894217
## reszvetel_q 0.001955 0.018291 0.107 0.914882
## budapest_ido_km_q -0.009657 0.049691 -0.194 0.845911
## megye_ido_km_q -0.016487 0.057590 -0.286 0.774655
## megyeszekhely_km_q 0.025214 0.058349 0.432 0.665643
## megyeszekhely_min_q 0.009368 0.034458 0.272 0.785722
## budapest_min_q 0.003638 0.050300 0.072 0.942335
## altisk_q -0.009138 0.019293 -0.474 0.635768
## jovedelem_fo_q 0.004507 0.024638 0.183 0.854844
## ujszulott_rate_q -0.008730 0.019140 -0.456 0.648300
## idosek_rate_q 0.013325 0.032348 0.412 0.680382
## nepesseg_q 0.038581 0.048367 0.798 0.425055
## elvandorlas_q -0.002081 0.043232 -0.048 0.961614
## odavanadorlas_q 0.001925 0.040114 0.048 0.961722
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 156.986 on 3153 degrees of freedom
## Residual deviance: 94.478 on 3128 degrees of freedom
## AIC: 1875.6
##
## Number of Fisher Scoring iterations: 4
merge_all_t_star_all$pred_logit_jobbik <- predict.glm(logitcoeffs_regression_jobbik_2014_2018_tstar_all, type="response")
ggplot(data = merge_all_t_star_all, aes(x=egyeni_jobbik_pc.y, y= pred_logit_jobbik)) + xlim(0.00, 0.65) + ylim(0.00, 0.65) +
geom_text(aes(label=megyeid), size = 1, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Jobbik - Actual and predicted vote share in each town") + xlab("2018 Jobbik vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_jobbik, y=pred_logit_jobbik), color="green", size = 1) +
theme_minimal()
ggsave(("Jobbik_GLM_by_megye_id_2.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = merge_all_t_star_all, aes(x=egyeni_jobbik_pc.y, y= pred_logit_jobbik)) + xlim(0.00, 0.65) + ylim(0.00, 0.65) +
geom_text(aes(label=telnev), size = 1, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Jobbik - Actual and predicted vote share in each town") + xlab("2018 Jobbik vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_jobbik, y=pred_logit_jobbik), color="green", size = 1) +
theme_minimal()
ggsave(("Jobbik_GLM_by_town_2.png"), width = 25, height = 25, units = c("cm"))
GLM prediction was also done using OEVK level metrics on the 2018 data. Since some of the predictors from the KSH database cannot be merged on the OEVK level, they were not used for this analysis. Instead, the number of cities, proportion of cities vs. towns, and the previously defined OEVK profile was used. With 106 data points, this analysis showed a clearer picture of where Fidesz and other parties overperformed and underperformed.
In the case of Fidesz, they managed to get better results in Jobbik target seats such as seats in Heves and Borsod, but they also performed worse in Budapest according to GLM.
Jobbik performed worse in all key counties (Borsod, Jász-Nagykun Szolnok, and Heves) suggesting that their voters were taken by Fidesz.
The chart on MSZP does not tell much as GLM underpredicts their support completely as their support collapsed since 2014. The joint list from 2014 is not comparable to the 2018 results.
LMP results show a mixed picture in non-target seats. Some of their candidates performed very well thanks to tactical voting while others underperformed for the same reason. Overall, GLM does not tell much about LMP since their contested seats were the most affected by tactical voting.
new_by_oevk_2014 <- read.csv("oevk2014_clean_new.csv")
egyeni_lista_by_oevk_2018 <- read.csv("2018_by_oevk_clean.csv")
new_by_oevk_2014 <- as.data.table(new_by_oevk_2014)
egyeni_lista_by_oevk_2018 <- as.data.table(egyeni_lista_by_oevk_2018)
oevk_2014_vs_2018 <- merge(new_by_oevk_2014, egyeni_lista_by_oevk_2018, by = "oevk_id")
write.csv(oevk_2014_vs_2018, "egyeni_oevk_2014_vs_2018.csv")
#FIDESZ
oevk_2014_vs_2018_glm_fidesz <- glm(egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + szavazokorok_szama + telepulesek_szama + profil + varos_aranya, data=oevk_2014_vs_2018)
summary(oevk_2014_vs_2018_glm_fidesz)
##
## Call:
## glm(formula = egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + szavazokorok_szama +
## telepulesek_szama + profil + varos_aranya, data = oevk_2014_vs_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.070384 -0.019054 -0.000415 0.017455 0.064917
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.1841660 0.0507871 3.626 0.000455 ***
## egyeni_fidesz_pc.x 0.7686353 0.0675697 11.375 < 2e-16 ***
## szavazokorok_szama -0.0006104 0.0003207 -1.903 0.059869 .
## telepulesek_szama 0.0006426 0.0002620 2.453 0.015917 *
## profil 0.0066688 0.0046759 1.426 0.156926
## varos_aranya -0.0348797 0.0277902 -1.255 0.212365
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for gaussian family taken to be 0.0007590127)
##
## Null deviance: 0.553482 on 105 degrees of freedom
## Residual deviance: 0.075901 on 100 degrees of freedom
## AIC: -452.81
##
## Number of Fisher Scoring iterations: 2
coeftest(oevk_2014_vs_2018_glm_fidesz)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.18416599 0.05078708 3.6262 0.0002876 ***
## egyeni_fidesz_pc.x 0.76863533 0.06756969 11.3754 < 2.2e-16 ***
## szavazokorok_szama -0.00061043 0.00032071 -1.9034 0.0569931 .
## telepulesek_szama 0.00064259 0.00026201 2.4525 0.0141850 *
## profil 0.00666879 0.00467593 1.4262 0.1538116
## varos_aranya -0.03487974 0.02779023 -1.2551 0.2094396
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
logitcoeffs_oevk_2014_vs_2018_glm_fidesz <- glm(egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + szavazokorok_szama + telepulesek_szama + profil + varos_aranya, data=oevk_2014_vs_2018, family='binomial')
summary(logitcoeffs_oevk_2014_vs_2018_glm_fidesz)
##
## Call:
## glm(formula = egyeni_fidesz_pc.y ~ egyeni_fidesz_pc.x + szavazokorok_szama +
## telepulesek_szama + profil + varos_aranya, family = "binomial",
## data = oevk_2014_vs_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.141152 -0.037677 -0.001174 0.035991 0.130719
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.293554 3.722102 -0.348 0.728
## egyeni_fidesz_pc.x 3.133397 4.970704 0.630 0.528
## szavazokorok_szama -0.002480 0.023501 -0.106 0.916
## telepulesek_szama 0.002617 0.019188 0.136 0.892
## profil 0.027672 0.342334 0.081 0.936
## varos_aranya -0.136056 2.028938 -0.067 0.947
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2.2374 on 105 degrees of freedom
## Residual deviance: 0.3103 on 100 degrees of freedom
## AIC: 138.43
##
## Number of Fisher Scoring iterations: 3
oevk_2014_vs_2018$pred_logit_fidesz <- predict.glm(logitcoeffs_oevk_2014_vs_2018_glm_fidesz, type="response")
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_fidesz_pc.y, y= pred_logit_fidesz)) + xlim(0.25, 0.65) + ylim(0.25, 0.65) +
geom_text(aes(label=oevk_id), size = 1.5, check_overlap = FALSE) +
geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("Fidesz - Actual and predicted vote share in each OEVK") + xlab("2018 Fidesz vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_fidesz, y=pred_logit_fidesz), color="green", size = 1) +
theme_minimal()
ggsave(("fidesz_GLM_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_fidesz_pc.y, y= pred_logit_fidesz)) + xlim(0.25, 0.65) + ylim(0.25, 0.65) +
geom_text(aes(label=profil), size = 3, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Fidesz - Actual and predicted vote share in each OEVK") + xlab("2018 Fidesz vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_fidesz, y=pred_logit_fidesz), color="green", size = 1) +
theme_minimal()
ggsave(("fidesz_GLM_by_OEVK_2.png"), width = 25, height = 25, units = c("cm"))
#JOBBIK
oevk_2014_vs_2018_glm_jobbik <- glm(egyeni_jobbik_pc.y ~ egyeni_jobbik_pc.x + szavazokorok_szama + telepulesek_szama + profil + varos_aranya, data=oevk_2014_vs_2018)
summary(oevk_2014_vs_2018_glm_jobbik)
##
## Call:
## glm(formula = egyeni_jobbik_pc.y ~ egyeni_jobbik_pc.x + szavazokorok_szama +
## telepulesek_szama + profil + varos_aranya, data = oevk_2014_vs_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.14504 -0.03421 -0.00601 0.02027 0.14410
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0046273 0.0627061 0.074 0.9413
## egyeni_jobbik_pc.x 1.2102296 0.1098957 11.013 <2e-16 ***
## szavazokorok_szama 0.0007328 0.0005378 1.363 0.1761
## telepulesek_szama -0.0007960 0.0004592 -1.733 0.0861 .
## profil -0.0031583 0.0086784 -0.364 0.7167
## varos_aranya -0.0977643 0.0521019 -1.876 0.0635 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for gaussian family taken to be 0.002621602)
##
## Null deviance: 1.07533 on 105 degrees of freedom
## Residual deviance: 0.26216 on 100 degrees of freedom
## AIC: -321.42
##
## Number of Fisher Scoring iterations: 2
coeftest(oevk_2014_vs_2018_glm_jobbik)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.00462732 0.06270614 0.0738 0.94117
## egyeni_jobbik_pc.x 1.21022963 0.10989566 11.0125 < 2e-16 ***
## szavazokorok_szama 0.00073279 0.00053782 1.3625 0.17303
## telepulesek_szama -0.00079600 0.00045920 -1.7335 0.08302 .
## profil -0.00315833 0.00867843 -0.3639 0.71591
## varos_aranya -0.09776426 0.05210192 -1.8764 0.06060 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
logitcoeffs_oevk_2014_vs_2018_glm_jobbik <- glm(egyeni_jobbik_pc.y ~ egyeni_jobbik_pc.x + szavazokorok_szama + telepulesek_szama + profil + varos_aranya, data=oevk_2014_vs_2018, family='binomial')
summary(logitcoeffs_oevk_2014_vs_2018_glm_jobbik)
##
## Call:
## glm(formula = egyeni_jobbik_pc.y ~ egyeni_jobbik_pc.x + szavazokorok_szama +
## telepulesek_szama + profil + varos_aranya, family = "binomial",
## data = oevk_2014_vs_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.32633 -0.08359 -0.02793 0.06536 0.31975
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.822942 2.953395 -0.956 0.339
## egyeni_jobbik_pc.x 6.967094 5.106479 1.364 0.172
## szavazokorok_szama 0.004077 0.025100 0.162 0.871
## telepulesek_szama -0.004278 0.021189 -0.202 0.840
## profil 0.028197 0.407411 0.069 0.945
## varos_aranya -0.366803 2.389945 -0.153 0.878
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 6.3416 on 105 degrees of freedom
## Residual deviance: 1.6400 on 100 degrees of freedom
## AIC: 70.757
##
## Number of Fisher Scoring iterations: 5
oevk_2014_vs_2018$pred_logit_jobbik <- predict.glm(logitcoeffs_oevk_2014_vs_2018_glm_jobbik, type="response")
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_jobbik_pc.y, y= pred_logit_jobbik)) + xlim(0.00, 0.5) + ylim(0.00, 0.5) +
geom_text(aes(label=oevk_id), size = 1.5, check_overlap = FALSE) +
geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("Jobbik - Actual and predicted vote share in each OEVK") + xlab("2018 Jobbik vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_jobbik, y=pred_logit_jobbik), color="green", size = 1) +
theme_minimal()
ggsave(("jobbik_GLM_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_jobbik_pc.y, y= pred_logit_jobbik)) + xlim(0.00, 0.5) + ylim(0.00, 0.5) +
geom_text(aes(label=profil), size = 3, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Jobbik - Actual and predicted vote share in each OEVK") + xlab("2018 Jobbik vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_jobbik, y=pred_logit_jobbik), color="green", size = 1) +
theme_minimal()
ggsave(("jobbik_GLM_by_OEVK_2.png"), width = 25, height = 25, units = c("cm"))
#MSZP
oevk_2014_vs_2018_glm_mszp <- glm(egyeni_mszp_pc ~ egyeni_kormanyvaltok_pc + szavazokorok_szama + telepulesek_szama + profil + varos_aranya, data=oevk_2014_vs_2018)
summary(oevk_2014_vs_2018_glm_mszp)
##
## Call:
## glm(formula = egyeni_mszp_pc ~ egyeni_kormanyvaltok_pc + szavazokorok_szama +
## telepulesek_szama + profil + varos_aranya, data = oevk_2014_vs_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.243953 -0.106044 -0.004461 0.080114 0.264871
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.1387649 0.1782991 -0.778 0.438247
## egyeni_kormanyvaltok_pc 1.2131062 0.3494977 3.471 0.000767 ***
## szavazokorok_szama -0.0006360 0.0013546 -0.470 0.639732
## telepulesek_szama 0.0004414 0.0011185 0.395 0.693927
## profil 0.0032081 0.0238472 0.135 0.893257
## varos_aranya -0.0549112 0.1302167 -0.422 0.674156
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for gaussian family taken to be 0.01657072)
##
## Null deviance: 2.1105 on 105 degrees of freedom
## Residual deviance: 1.6571 on 100 degrees of freedom
## AIC: -125.97
##
## Number of Fisher Scoring iterations: 2
coeftest(oevk_2014_vs_2018_glm_mszp)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.13876492 0.17829909 -0.7783 0.4364096
## egyeni_kormanyvaltok_pc 1.21310616 0.34949772 3.4710 0.0005185 ***
## szavazokorok_szama -0.00063599 0.00135461 -0.4695 0.6387095
## telepulesek_szama 0.00044143 0.00111849 0.3947 0.6930869
## profil 0.00320807 0.02384724 0.1345 0.8929869
## varos_aranya -0.05491115 0.13021673 -0.4217 0.6732510
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
logitcoeffs_oevk_2014_vs_2018_glm_mszp <- glm(egyeni_mszp_pc ~ egyeni_kormanyvaltok_pc + szavazokorok_szama + telepulesek_szama + profil + varos_aranya, data=oevk_2014_vs_2018, family='binomial')
summary(logitcoeffs_oevk_2014_vs_2018_glm_mszp)
##
## Call:
## glm(formula = egyeni_mszp_pc ~ egyeni_kormanyvaltok_pc + szavazokorok_szama +
## telepulesek_szama + profil + varos_aranya, family = "binomial",
## data = oevk_2014_vs_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.78672 -0.44952 -0.06469 0.25821 0.59849
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -4.608391 4.604771 -1.001 0.317
## egyeni_kormanyvaltok_pc 10.933535 8.501644 1.286 0.198
## szavazokorok_szama -0.005818 0.036399 -0.160 0.873
## telepulesek_szama 0.005192 0.031245 0.166 0.868
## profil 0.033440 0.618404 0.054 0.957
## varos_aranya -0.344204 3.621813 -0.095 0.924
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 21.860 on 105 degrees of freedom
## Residual deviance: 17.607 on 100 degrees of freedom
## AIC: 36.922
##
## Number of Fisher Scoring iterations: 5
oevk_2014_vs_2018$pred_logit_mszp <- predict.glm(logitcoeffs_oevk_2014_vs_2018_glm_mszp, type="response")
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_mszp_pc, y= pred_logit_mszp)) + xlim(0.001, 0.65) + ylim(0.001, 0.65) +
geom_text(aes(label=oevk_id), size = 1.5, check_overlap = FALSE) +
geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("MSZP - Actual and predicted vote share in each OEVK") + xlab("2018 MSZP vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_mszp, y=pred_logit_mszp), color="green", size = 1) +
theme_minimal()
ggsave(("mszp_GLM_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
#LMP
oevk_2014_vs_2018_glm_lmp <- glm(egyeni_lmp_pc.y ~ egyeni_lmp_pc.x + szavazokorok_szama + telepulesek_szama + profil + varos_aranya, data=oevk_2014_vs_2018)
summary(oevk_2014_vs_2018_glm_lmp)
##
## Call:
## glm(formula = egyeni_lmp_pc.y ~ egyeni_lmp_pc.x + szavazokorok_szama +
## telepulesek_szama + profil + varos_aranya, data = oevk_2014_vs_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.140699 -0.023615 -0.004723 0.017006 0.263163
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.1425703 0.0690664 -2.064 0.04158 *
## egyeni_lmp_pc.x 2.6727196 0.3144401 8.500 1.89e-13 ***
## szavazokorok_szama -0.0003116 0.0005697 -0.547 0.58556
## telepulesek_szama 0.0001066 0.0004821 0.221 0.82538
## profil 0.0270235 0.0093295 2.897 0.00463 **
## varos_aranya 0.0319351 0.0566793 0.563 0.57440
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for gaussian family taken to be 0.003101785)
##
## Null deviance: 0.55296 on 105 degrees of freedom
## Residual deviance: 0.31018 on 100 degrees of freedom
## AIC: -303.59
##
## Number of Fisher Scoring iterations: 2
coeftest(oevk_2014_vs_2018_glm_lmp)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.14257027 0.06906643 -2.0642 0.038994 *
## egyeni_lmp_pc.x 2.67271956 0.31444009 8.4999 < 2.2e-16 ***
## szavazokorok_szama -0.00031163 0.00056965 -0.5471 0.584337
## telepulesek_szama 0.00010665 0.00048210 0.2212 0.824925
## profil 0.02702353 0.00932949 2.8966 0.003773 **
## varos_aranya 0.03193506 0.05667934 0.5634 0.573139
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
logitcoeffs_oevk_2014_vs_2018_glm_lmp <- glm(egyeni_lmp_pc.y ~ egyeni_lmp_pc.x + szavazokorok_szama + telepulesek_szama + profil + varos_aranya, data=oevk_2014_vs_2018, family='binomial')
summary(logitcoeffs_oevk_2014_vs_2018_glm_lmp)
##
## Call:
## glm(formula = egyeni_lmp_pc.y ~ egyeni_lmp_pc.x + szavazokorok_szama +
## telepulesek_szama + profil + varos_aranya, family = "binomial",
## data = oevk_2014_vs_2018)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.54459 -0.05951 -0.01574 0.05972 0.55071
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -6.005728 5.325630 -1.128 0.2594
## egyeni_lmp_pc.x 33.931603 18.312972 1.853 0.0639 .
## szavazokorok_szama -0.007045 0.048793 -0.144 0.8852
## telepulesek_szama 0.004602 0.041633 0.111 0.9120
## profil 0.428747 0.739550 0.580 0.5621
## varos_aranya 1.099436 4.852182 0.227 0.8207
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 6.0408 on 105 degrees of freedom
## Residual deviance: 2.5811 on 100 degrees of freedom
## AIC: 24.575
##
## Number of Fisher Scoring iterations: 6
oevk_2014_vs_2018$pred_logit_lmp <- predict.glm(logitcoeffs_oevk_2014_vs_2018_glm_lmp, type="response")
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_lmp_pc.y, y= pred_logit_lmp)) + xlim(0.001, 0.2) + ylim(0.001, 0.2) +
geom_text(aes(label=oevk_id), size = 1.5, check_overlap = FALSE) +
geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("LMP - Actual and predicted vote share in each OEVK") + xlab("2018 LMP vote %") + ylab("GLM prediction") +
geom_line(aes(x=pred_logit_lmp, y=pred_logit_lmp), color="green", size = 1) +
theme_minimal()
ggsave(("lmp_GLM_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
The final set of prediction comparison was done using the 2014 raw UNS data compared to the 2018 data.
This shows the list of constituencies and contituency profile types where parties overperformed or underperformed compared to the expected UNS vote share. This analysis is useful as it shows how the share of votes of a given party had reallocated between different parts of the the country since the last election.
Fidesz performed better in rural OEVKs (code 3 and over) and in Miskolc (in Borsod county where both Jobbik and MSZP had one target seat each), however they underperformed in Budapest (OEVKs marked with 0) suggesting that their core voter base is shrinking in the capital.
Jobbik was getting less votes in Budapest and in other big cities because of tactical voting, but their vote share has exceeded expectation in rural areas, both in target seats with bigger cities (such as Békéscsaba in Békés 1), but their other target seats in rural areas (such as seats in Borsod and Jász-Nagykun-Szolnok coutines), they performed worse.
UNS does not tell much about LMP and MSZP other than the huge difference thanks to tactical voting. In some cases, the deviance was up to 30% because left-wing voters and Jobbik supported MSZP or DK candidates in Budapest, while in rural areas, MSZP and LMP performed 10-20% worse as they cast their votes on Jobbik.
### UNIFORM SWING vote share
data <- read.csv("vote_counts_precincts_2b.csv")
data <- as.data.table(data)
#kamupartok egyesitese es szurese
kamu <- subset(data, select = c(id, mcp, haza_nem_elado, sms, fkgp, udp, sem, jesz, ump, munkaspart, szocdemek, kti, egyutt2014, zoldek, osszefogas))
kamu$egyeb <- rowSums( kamu[,2:15] )
kamu2 <- subset(kamu, select = c(id, egyeb))
data2 <- merge(data, kamu2, by="id")
#reszveteli adatok, 4 part listaja, egyeni, egyeb partok lista + megye, telepules, szavazokor kulon
data_clean <- subset(data2, select = c(id, atjelentkezettek, szavazokor, oevk_id, szavazok, reszvetel, fidesz, lmp, kormanyvaltok, jobbik, egyeni_fidesz, egyeni_lmp, egyeni_kormanyvaltok, egyeni_jobbik, egyeb))
#szavazasra jogosultak szama / szavazokor
data_clean <- data_clean[, ossz_szavazo := round(szavazok / (reszvetel /100), digits = 0)]
#szavazokorok szama
data_szavazokorok_szama <- data_clean[, list(szavazokorok_szama = .N), by = oevk_id]
data_clean <- merge(data_clean, data_szavazokorok_szama, by = "oevk_id")
#UJ VALTOZOK - partok szazalekos egyeni eredmenye egymashoz viszonyitva (kamupartok nelkul)
data_clean <- data_clean[, egyeni_fidesz_pc := egyeni_fidesz / (egyeni_fidesz + egyeni_jobbik + egyeni_kormanyvaltok + egyeni_lmp + egyeb)]
data_clean <- data_clean[, egyeni_kormanyvaltok_pc := egyeni_kormanyvaltok / (egyeni_fidesz + egyeni_jobbik + egyeni_kormanyvaltok + egyeni_lmp + egyeb)]
data_clean <- data_clean[, egyeni_jobbik_pc := egyeni_jobbik / (egyeni_fidesz + egyeni_jobbik + egyeni_kormanyvaltok + egyeni_lmp + egyeb)]
data_clean <- data_clean[, egyeni_lmp_pc := egyeni_lmp / (egyeni_fidesz + egyeni_jobbik + egyeni_kormanyvaltok + egyeni_lmp + egyeb)]
##2014 results - OEVK
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Fidesz_2014_egyeni_UNS := 44.13]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Kormanyvaltok_2014_egyeni_UNS := 26.86]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Jobbik_2014_egyeni_UNS := 20.34]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, LMP_2014_egyeni_UNS := 4.98]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Egyeb_2014_orszagos_UNS := 3.69]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, reszvetel_2014 := 60.99]
#2014 results -party lists
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Fidesz_2014_orszagos_UNS := 43.55]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Kormanyvaltok_2014_orszagos_UNS := 26.21]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Jobbik_2014_orszagos_UNS := 20.69]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, LMP_2014_orszagos_UNS := 5.47]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Egyeb_2014_orszagos_UNS := 4.08]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, reszvetel_2014 := 60.99]
#2018 results - OEVK
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Fidesz_2018_egyeni_UNS := 47.97]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, MSZP_P_DK_2018_egyeni_UNS := 17.66]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Jobbik_2018_egyeni_UNS := 23.23]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, LMP_2018_egyeni_UNS := 5.69]
#2018 results - party lists
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Fidesz_2018_orszagos_UNS := 47.36]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, MSZP_P_DK_2018_orszagos_UNS := 17.95]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, Jobbik_2018_orszagos_UNS := 19.81]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, LMP_2018_orszagos_UNS := 7.31]
oevk_2014_vs_2018 <- oevk_2014_vs_2018[, reszvetel_2018 := 70.2]
## DEFINE ALL UNS values (OEVK and party list ones) for 4+1 parties
oevk_2014_vs_2018$Fidesz_2018_UNS_listas_pc <- oevk_2014_vs_2018[, orszagos_fidesz_pc * (Fidesz_2018_orszagos_UNS / Fidesz_2014_orszagos_UNS)]
oevk_2014_vs_2018$Fidesz_2018_UNS_egyeni_pc <- oevk_2014_vs_2018[, egyeni_fidesz_pc.x * (Fidesz_2018_egyeni_UNS / Fidesz_2014_egyeni_UNS)]
oevk_2014_vs_2018$Jobbik_2018_UNS_listas_pc <- oevk_2014_vs_2018[, orszagos_jobbik_pc * (Jobbik_2018_orszagos_UNS / Jobbik_2014_orszagos_UNS)]
oevk_2014_vs_2018$Jobbik_2018_UNS_egyeni_pc <- oevk_2014_vs_2018[, egyeni_jobbik_pc.x * (Jobbik_2018_egyeni_UNS / Jobbik_2014_egyeni_UNS)]
oevk_2014_vs_2018$MSZP_DK_2018_UNS_listas_pc <- oevk_2014_vs_2018[, orszagos_kormanyvaltok_pc * (MSZP_P_DK_2018_orszagos_UNS / Kormanyvaltok_2014_orszagos_UNS)]
oevk_2014_vs_2018$MSZP_DK_2018_UNS_egyeni_pc <- oevk_2014_vs_2018[, egyeni_kormanyvaltok_pc * (MSZP_P_DK_2018_egyeni_UNS / Kormanyvaltok_2014_egyeni_UNS)]
oevk_2014_vs_2018$LMP_2018_UNS_listas_pc <- oevk_2014_vs_2018[, orszagos_lmp_pc * (LMP_2018_orszagos_UNS / LMP_2014_orszagos_UNS)]
oevk_2014_vs_2018$LMP_2018_UNS_egyeni_pc <- oevk_2014_vs_2018[, egyeni_lmp_pc.x * (LMP_2018_egyeni_UNS / LMP_2014_egyeni_UNS)]
write.csv(oevk_2014_vs_2018, "oevk_2014_2018_UNS_OEVK_values.csv")
# FIDESZ
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_fidesz_pc.y, y= Fidesz_2018_UNS_egyeni_pc)) + xlim(0.25, 0.65) + ylim(0.25, 0.65) +
geom_text(aes(label=oevk_id), size = 1.5, check_overlap = FALSE) +
geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("Fidesz - Actual and predicted vote share in each OEVK") + xlab("2018 Fidesz vote %") + ylab("UNS prediction") +
geom_line(aes(x=Fidesz_2018_UNS_egyeni_pc, y=Fidesz_2018_UNS_egyeni_pc), color="green", size = 1) +
theme_minimal()
ggsave(("fidesz_UNS_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_fidesz_pc.y, y= Fidesz_2018_UNS_egyeni_pc)) + xlim(0.25, 0.65) + ylim(0.25, 0.65) +
geom_text(aes(label=profil), size = 3, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Fidesz - Actual and predicted vote share in each OEVK type") + xlab("2018 Fidesz vote %") + ylab("UNS prediction") +
geom_line(aes(x=Fidesz_2018_UNS_egyeni_pc, y=Fidesz_2018_UNS_egyeni_pc), color="green", size = 1) +
theme_minimal()
ggsave(("fidesz_UNS_by_OEVK_type.png"), width = 25, height = 25, units = c("cm"))
#JOBBIK
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_jobbik_pc.y, y= Jobbik_2018_UNS_egyeni_pc)) + xlim(0.05, 0.45) + ylim(0.05, 0.45) +
geom_text(aes(label=oevk_id), size = 1.5, check_overlap = FALSE) +
geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("Jobbik - Actual and predicted vote share in each OEVK") + xlab("2018 Jobbik vote %") + ylab("UNS prediction") +
geom_line(aes(x=Jobbik_2018_UNS_egyeni_pc, y=Jobbik_2018_UNS_egyeni_pc), color="green", size = 1) +
theme_minimal()
ggsave(("Jobbik_UNS_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_jobbik_pc.y, y= Jobbik_2018_UNS_egyeni_pc)) + xlim(0.05, 0.45) + ylim(0.05, 0.45) +
geom_text(aes(label=profil), size = 3, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("Jobbik - Actual and predicted vote share in each OEVK type") + xlab("2018 Jobbik vote %") + ylab("UNS prediction") +
geom_line(aes(x=Jobbik_2018_UNS_egyeni_pc, y=Jobbik_2018_UNS_egyeni_pc), color="green", size = 1) +
theme_minimal()
ggsave(("Jobbik_UNS_by_OEVK_type.png"), width = 25, height = 25, units = c("cm"))
#MSZP-DK
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_mszp_pc, y= MSZP_DK_2018_UNS_egyeni_pc)) + xlim(0.001, 0.6) + ylim(0.001, 0.6) +
geom_text(aes(label=oevk_id), size = 1.5, check_overlap = FALSE) +
geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("MSZP - Actual and predicted vote share in each OEVK") + xlab("2018 MSZP vote %") + ylab("UNS prediction") +
geom_line(aes(x=MSZP_DK_2018_UNS_egyeni_pc, y=MSZP_DK_2018_UNS_egyeni_pc), color="green", size = 1) +
theme_minimal()
ggsave(("MSZP_UNS_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_mszp_pc, y= MSZP_DK_2018_UNS_egyeni_pc)) + xlim(0.001, 0.6) + ylim(0.001, 0.6) +
geom_text(aes(label=profil), size = 3, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("MSZP - Actual and predicted vote share in each OEVK type") + xlab("2018 MSZP vote %") + ylab("UNS prediction") +
geom_line(aes(x=MSZP_DK_2018_UNS_egyeni_pc, y=MSZP_DK_2018_UNS_egyeni_pc), color="green", size = 1) +
theme_minimal()
ggsave(("MSZP_UNS_by_OEVK_type.png"), width = 25, height = 25, units = c("cm"))
#LMP
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_lmp_pc.y, y= LMP_2018_UNS_egyeni_pc)) + xlim(0.001, 0.3) + ylim(0.001, 0.3) +
geom_text(aes(label=oevk_id), size = 1.5, check_overlap = FALSE) +
geom_point(color ="red") +
geom_smooth(method = "loess") + ggtitle("LMP - Actual and predicted vote share in each OEVK") + xlab("2018 LMP vote %") + ylab("UNS prediction") +
geom_line(aes(x=LMP_2018_UNS_egyeni_pc, y=LMP_2018_UNS_egyeni_pc), color="green", size = 1) +
theme_minimal()
ggsave(("LMP_UNS_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
ggplot(data = oevk_2014_vs_2018, aes(x=egyeni_lmp_pc.y, y= MSZP_DK_2018_UNS_egyeni_pc)) + xlim(0.001, 0.3) + ylim(0.001, 0.3) +
geom_text(aes(label=profil), size = 3, check_overlap = FALSE) +
geom_smooth(method = "loess") + ggtitle("LMP - Actual and predicted vote share in each OEVK type") + xlab("2018 LMP vote %") + ylab("UNS prediction") +
geom_line(aes(x=LMP_2018_UNS_egyeni_pc, y=LMP_2018_UNS_egyeni_pc), color="green", size = 1) +
theme_minimal()
ggsave(("LMP_UNS_by_OEVK_type.png"), width = 25, height = 25, units = c("cm"))
### UNS deviation
#FIDESZ
oevk_2014_vs_2018$Fidesz_2018_UNS_egyeni_pc_elteres <- oevk_2014_vs_2018[, egyeni_fidesz_pc.y - Fidesz_2018_UNS_egyeni_pc]
ggplot(oevk_2014_vs_2018, aes(egyeni_fidesz_pc.y, Fidesz_2018_UNS_egyeni_pc_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id), size = 2) + geom_smooth(method = "lm") +
geom_hline (yintercept=0, linetype="dashed", color = "red") +
ggtitle("Fidesz actual vote share and prediction error by OEVK") +
xlab("Fidesz vote share") + ylab("UNS Prediction error") +
xlim(0.25, 0.65) +
theme_minimal()
ggsave(("fidesz_UNS_deviation_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
#JOBBIK
oevk_2014_vs_2018$Jobbik_2018_UNS_egyeni_pc_elteres <- oevk_2014_vs_2018[, egyeni_jobbik_pc.y - Jobbik_2018_UNS_egyeni_pc]
ggplot(oevk_2014_vs_2018, aes(egyeni_jobbik_pc.y, Jobbik_2018_UNS_egyeni_pc_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id), size = 2) + geom_smooth(method = "lm") +
geom_hline (yintercept=0, linetype="dashed", color = "red") +
ggtitle("Jobbik actual vote share and prediction error by OEVK") +
xlab("Jobbik vote share") + ylab("UNS Prediction error") +
xlim(0.05, 0.45) +
theme_minimal()
ggsave(("jobbik_UNS_deviation_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
#MSZP-DK
oevk_2014_vs_2018$MSZP_DK_2018_UNS_egyeni_pc_elteres <- oevk_2014_vs_2018[, egyeni_mszp_pc - MSZP_DK_2018_UNS_egyeni_pc]
ggplot(oevk_2014_vs_2018, aes(egyeni_mszp_pc, MSZP_DK_2018_UNS_egyeni_pc_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id), size = 2) + geom_smooth(method = "lm") +
geom_hline (yintercept=0, linetype="dashed", color = "red") +
ggtitle("MSZP actual vote share and prediction error by OEVK") +
xlab("MSZP vote share") + ylab("UNS Prediction error") +
xlim(0.001, 0.6) +
theme_minimal()
ggsave(("mszp_UNS_deviation_by_OEVK.png"), width = 25, height = 25, units = c("cm"))
#LMP
oevk_2014_vs_2018$LMP_2018_UNS_egyeni_pc_elteres <- oevk_2014_vs_2018[, egyeni_lmp_pc.y - LMP_2018_UNS_egyeni_pc]
ggplot(oevk_2014_vs_2018, aes(egyeni_lmp_pc.y, LMP_2018_UNS_egyeni_pc_elteres)) + geom_point(color ="red") +
geom_text(aes(label=oevk_id), size = 2) + geom_smooth(method = "lm") +
geom_hline (yintercept=0, linetype="dashed", color = "red") +
ggtitle("LMP actual vote share and prediction error by OEVK") +
xlab("Fidesz vote share") + ylab("UNS Prediction error") +
xlim(0.001, 0.25) +
theme_minimal()
ggsave(("fidesz_UNS_deviation_by_OEVK.png"), width = 25, height = 25, units = c("cm"))